//
//  Son.h
//  ReviewDemo
//
//  Created by 龙 on 2018/3/21.
//  Copyright © 2018年 long. All rights reserved.
//

#import "PeopleModel.h"

//https://www.jianshu.com/p/ce97c66027cd
//objc_subclassing_restricted属性表示被修饰的类不能被其他类继承，否则会报错。
__attribute__((objc_subclassing_restricted))

@interface Son : PeopleModel

@end

//Cannot subclass a class that was declared with the 'objc_subclassing_restricted' attribute
//@interface grandson : Son
//
//@end

/*
 __attribute__是一套编译器指令，被GNU和LLVM编译器所支持，允许对于__attribute__增加一些参数，做一些高级检查和优化。
 __attribute__的语法是，在后面加两个括号，然后写属性列表，属性列表以逗号分隔
 用例：__attribute__((attribute1, attribute2));

 
 
 1、objc_subclassing_restricted 属性表示被修饰的类不能被其他类继承，否则会报错。
    报错：Cannot subclass a class that was declared with the 'objc_subclassing_restricted' attribute
 2、objc_requires_super 属性表示子类必须调用被修饰的方法super，否则报黄色警告。
    Warning : Method possibly missing a [super eatFood:] call
 3、constructor / destructor
 （1）、constructor属性表示在main函数执行之前，可以执行一些操作
       执行时机是在所有load方法都执行完之后，才会执行所有constructor属性修饰的函数。
 （2）、destructor属性表示在main函数执行之后做一些操作
 （3）、在有多个constructor或destructor属性修饰的函数时，可以通过设置优先级来指定执行顺序。
       格式是__attribute__((constructor(101)))的方式，在属性后面直接跟优先级。
       在constructor中根据优先级越低，执行顺序越高。而destructor则相反，优先级越高则执行顺序越高。
 4、overloadable ：允许定义多个同名但不同参数类型的函数，在调用时编译器会根据传入参数类型自动匹配函数。这个有点类似于C++的函数重载，而且都是发生在编译期的行为。
 5、unused ： 很实用，在项目里经常会有未使用的变量，会报一个黄色警告。有时候可能会通过其他方式获取这个对象，所以不想出现这个警告，可以通过unused属性消除这个警告。
 



 */
